#include"../server.hpp"

class EchoServer
{
private:
    TcpServer _server;
private:
    void Connected(const PtrConnection &conn)
    {
        DBG_LOG("NEW CONNECTION! :%p", conn.get());
    }

    void OnClosed(const PtrConnection &conn)
    {
        DBG_LOG("CLOESE CONNECTION! :%p", conn.get());
    }

    void OnMessage(const PtrConnection &conn, Buffer *buf)
    {
        // DBG_LOG("%s", buf->GetReadPosition());
        conn->Send(buf->GetReadPosition(), buf->ReadAbleSize());
        buf->MoveReadOffset(buf->ReadAbleSize());
        conn->Shutdown();
    }
public:
    EchoServer(int port)
        : _server(port)
    {
        _server.SetThreadCount(2);
        _server.EnableActiveRelease(10);
        _server.SetClosedCallback(std::bind(&EchoServer::OnClosed, this,std::placeholders::_1));
        _server.SetConnectedCallback(std::bind(&EchoServer::Connected, this,std::placeholders::_1));
        _server.SetMessageCallback(std::bind(&EchoServer::OnMessage, this,std::placeholders::_1,std::placeholders::_2));
    }


    void Start()
    {
        _server.Start();
    }

};